#pragma once

#include "ScalarTypes.h"
#include <Eigen/Dense>
#include <string>
#include <vector>

namespace SL
{

namespace math
{
// Col actually
using RowVector2f = Eigen::Matrix<float, 2, 1>;
using RowVector3f = Eigen::Matrix<float, 3, 1>;
using RowVector4f = Eigen::Matrix<float, 4, 1>;

using RowVector2i = Eigen::Matrix<int, 2, 1>;
using RowVector3i = Eigen::Matrix<int, 3, 1>;
using RowVector4i = Eigen::Matrix<int, 4, 1>;

// using bool1 = vector<bool, 1>;
// using bool2 = vector<bool, 2>;
// using bool3 = vector<bool, 3>;
// using bool4 = vector<bool, 4>;
// using uint1 = vector<uint, 1>;
// using uint2 = vector<uint, 2>;
// using uint3 = vector<uint, 3>;
// using uint4 = vector<uint, 4>;
// using float1 = vector<float, 1>;
// using float2 = vector<float, 2>;
// using float3 = vector<float, 3>;
// using float4 = vector<float, 4>;

} // namespace math

using float2 = math::RowVector2f;
using float3 = math::RowVector3f;
using float4 = math::RowVector4f;
using int2 = math::RowVector2i;
using int3 = math::RowVector3i;
using int4 = math::RowVector4i;

// using bool1 = math::bool1;
// using bool2 = math::bool2;
// using bool3 = math::bool3;
// using bool4 = math::bool4;
// using int1 = math::int1;
// using int2 = math::int2;
// using int3 = math::int3;
// using int4 = math::int4;
// using uint1 = math::uint1;
// using uint2 = math::uint2;
// using uint3 = math::uint3;
// using uint4 = math::uint4;
// using float1 = math::float1;
// using float2 = math::float2;
// using float3 = math::float3;
// using float4 = math::float4;
} // namespace SL